ECS Fargate で 169.254.169.254 が含まれるエラーが発生するときの対処法
困っていた内容
自社アプリを Fargate に移行したところ Credentials 関係のエラーメッセージが発生します。
スタックトレースを確認するとインスタンスメタデータ(169.254.169.254
)への接続に失敗しているようです。対処法を教えてください。
どう対応すればいいの?
アプリ内の認証情報の取得先をご確認ください。
ECS Fargate で IAM ロール(タスクロール)の認証情報は次の URL から取得する必要があり、EC2 の場合に取得する URL とは異なります。
※AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
は環境変数であり、動的な値です。
## Fargate の場合 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI # 例 169.254.170.2/v2/credentials/96574b15-39b9-41fb-b2ea-2362089cd242 ## EC2 の場合 169.254.169.254/latest/meta-data/iam/security-credentials/
そのため、Fargate で169.254.169.254
への接続が含まれる認証エラーが発生する場合は、アプリケーション内のコードで、認証情報を EC2 向けの URL から取得していないか確認し、必要に応じて修正してください。
なお、AWS SDK はAWS_CONTAINER_CREDENTIALS_RELATIVE_URI
の有無によっては認証情報の取得先を切り替えているため、修正する際の選択肢としてAWS_CONTAINER_CREDENTIALS_RELATIVE_URI
の有無で切り替える実装もご検討ください。
If the variable exists, then the SDKs will try to obtain credentials by making requests to
http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI.
またAWS_CONTAINER_CREDENTIALS_RELATIVE_URI
が設定されるのは、コンテナ内の PID 1 プロセスのみで、複数のプロセスを実行している場合は、環境変数のエクスポートが必要になる場合があります。
Amazon ECS で「アクセス拒否」エラーを発生させないように IAM タスクロールを設定する | AWS re:Post
環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI を使用できるのは、コンテナ内の PID 1 プロセスのみです。コンテナで複数のプロセスまたは init プロセス (ラッパースクリプト、start スクリプト、supervisord など) を実行している場合、この環境変数を非 PID 1 プロセスで使用することはできません。